目前探討相關的東西核心知識已經差不多了,今天 26 天,可以探討一些比較細節的部分
今天探討的部分是 『多語言支援』,相信我們的 ai 應用不只有『台灣用戶』,有可能需求
需要出海,那這時候就希望我們的 ai 回答可以因地事宜,在 ai 功能完成後,
這會是一個必須要考量的事情。讓我們開始學習吧
市場擴展
:支援多語言可以幫助你的應用觸及更廣泛的用戶群。根據統計,
只有約 25% 的網路用戶使用英語,這意味著單語應用會錯過 75% 的潛在用戶。
用戶體驗
:使用母語的應用能提供更好的用戶體驗。
研究顯示,用戶更傾向於使用和購買支援其母語的產品和服務。
法規遵循
:在某些地區,提供本地語言支援可能是法律要求,
特別是在歐盟等重視語言權利的地區。
由於以上多語系是一般工程師未必會直接考慮但相對重要的事情
簡述 : AWS 的神經機器翻譯服務,支援超過 75 種語言之間的即時翻譯
簡述 : 以檢測文本的語言,這在處理多語言輸入時非常有用
簡述:多語言模型如 Claude 和其他基礎模型天生就支援多種語言,能夠理解和生成多種語言的內容。
我們來做一個多語言機器人,結合先前的知識
import boto3
import json
from datetime import datetime
# 初始化 AWS 服務客戶端
translate_client = boto3.client('translate', region_name='你的Region')
comprehend_client = boto3.client('comprehend', region_name='你的Region')
bedrock_runtime = boto3.client('bedrock-runtime', region_name='你的Region')
# 支援的語言列表
SUPPORTED_LANGUAGES = {
'zh': '繁體中文',
'zh-TW': '繁體中文(台灣)',
'en': 'English',
'ja': '日本語',
'ko': '한국어',
'es': 'Español',
'fr': 'Français',
'de': 'Deutsch'
}
def detect_language(text):
"""
偵測文字的語言
"""
try:
response = comprehend_client.detect_dominant_language(
Text=text
)
# 取得信心度最高的語言
languages = response['Languages']
if languages:
dominant_language = max(languages, key=lambda x: x['Score'])
return {
'language_code': dominant_language['LanguageCode'],
'confidence': dominant_language['Score']
}
return None
except Exception as e:
print(f"語言偵測錯誤: {str(e)}")
return None
# 測試語言偵測
test_texts = [
"Hello, how can I help you today?",
"你好,我今天可以如何幫助你?",
"こんにちは、今日はどのようにお手伝いできますか?"
]
for text in test_texts:
result = detect_language(text)
if result:
print(f"文字: {text}")
print(f"偵測語言: {result['language_code']}, 信心度: {result['confidence']:.2%}\n")
def translate_text(text, source_lang, target_lang):
"""
翻譯文字從來源語言到目標語言
"""
try:
# 如果來源語言和目標語言相同,直接返回原文
if source_lang == target_lang:
return text
response = translate_client.translate_text(
Text=text,
SourceLanguageCode=source_lang,
TargetLanguageCode=target_lang
)
return response['TranslatedText']
except Exception as e:
print(f"翻譯錯誤: {str(e)}")
return text
# 測試翻譯功能
original_text = "I would like to know more about your products."
translated_to_chinese = translate_text(original_text, 'en', 'zh-TW')
print(f"英文: {original_text}")
print(f"中文: {translated_to_chinese}")
# 翻譯回英文驗證
back_to_english = translate_text(translated_to_chinese, 'zh-TW', 'en')
print(f"回譯: {back_to_english}")
class MultilingualChatbot:
"""
多語言聊天機器人類別
"""
def __init__(self, default_language='en', system_language='en'):
self.default_language = default_language
self.system_language = system_language
self.conversation_history = []
def process_message(self, user_message, user_language=None):
"""
處理用戶訊息的完整流程
"""
# 步驟 1: 偵測語言(如果未指定)
if not user_language:
detected = detect_language(user_message)
user_language = detected['language_code'] if detected else self.default_language
print(f"偵測到語言: {user_language}")
# 步驟 2: 翻譯用戶訊息為系統語言(如果需要)
translated_message = user_message
if user_language != self.system_language:
translated_message = translate_text(
user_message,
user_language,
self.system_language
)
print(f"翻譯後訊息: {translated_message}")
# 步驟 3: 使用 Bedrock 生成回應
ai_response = self._generate_response(translated_message)
# 步驟 4: 翻譯回應為用戶語言(如果需要)
final_response = ai_response
if user_language != self.system_language:
final_response = translate_text(
ai_response,
self.system_language,
user_language
)
# 儲存對話歷史
self.conversation_history.append({
'timestamp': datetime.now().isoformat(),
'user_language': user_language,
'user_message': user_message,
'bot_response': final_response
})
return {
'response': final_response,
'detected_language': user_language,
'original_response': ai_response if user_language != self.system_language else None
}
def _generate_response(self, message):
"""
使用 Bedrock Claude 生成回應
"""
try:
# 準備對話上下文
conversation_context = "\n".join([
f"User: {item['user_message']}\nAssistant: {item['bot_response']}"
for item in self.conversation_history[-3:] # 只使用最近3輪對話
])
# 建立提示詞
prompt = f"""You are a helpful customer service assistant.
Previous conversation:
{conversation_context}
Current user message: {message}
Please provide a helpful, friendly, and professional response."""
# 呼叫 Bedrock
request_body = {
"anthropic_version": "bedrock-2023-05-31",
"max_tokens": 1000,
"messages": [
{
"role": "user",
"content": prompt
}
]
}
response = bedrock_runtime.invoke_model(
modelId='anthropic.claude-3-sonnet-20240229-v1:0',
body=json.dumps(request_body)
)
response_body = json.loads(response['body'].read())
return response_body['content'][0]['text']
except Exception as e:
print(f"生成回應錯誤: {str(e)}")
return "I apologize, but I'm having trouble processing your request right now."
def get_conversation_history(self):
"""
取得對話歷史
"""
return self.conversation_history
# 使用範例
chatbot = MultilingualChatbot(system_language='en')
# 測試不同語言的對話
print("=== 測試 1: 英文對話 ===")
result1 = chatbot.process_message("What are your business hours?")
print(f"回應: {result1['response']}\n")
print("=== 測試 2: 中文對話 ===")
result2 = chatbot.process_message("你們的營業時間是什麼時候?")
print(f"回應: {result2['response']}")
print(f"偵測語言: {result2['detected_language']}\n")
print("=== 測試 3: 日文對話 ===")
result3 = chatbot.process_message("営業時間を教えてください。")
print(f"回應: {result3['response']}")
print(f"偵測語言: {result3['detected_language']}\n")
Amazon Translate 支援自訂術語,這對於保持品牌名稱、產品名稱或專業術語的一致性非常重要
def create_custom_terminology():
"""
建立自訂翻譯術語
"""
# 準備術語資料(CSV 格式)
terminology_data = """en,zh-TW,ja
AWS,AWS,AWS
Amazon Bedrock,Amazon Bedrock,Amazon Bedrock
SageMaker,SageMaker,SageMaker
AI,AI,AI
Machine Learning,機器學習,機械学習"""
try:
response = translate_client.import_terminology(
Name='TechTerminology',
MergeStrategy='OVERWRITE',
TerminologyData={
'File': terminology_data.encode('utf-8'),
'Format': 'CSV'
}
)
print("自訂術語建立成功")
return response
except Exception as e:
print(f"建立術語錯誤: {str(e)}")
return None
def translate_with_terminology(text, source_lang, target_lang, terminology_names):
"""
使用自訂術語進行翻譯
"""
try:
response = translate_client.translate_text(
Text=text,
TerminologyNames=terminology_names,
SourceLanguageCode=source_lang,
TargetLanguageCode=target_lang
)
return response['TranslatedText']
except Exception as e:
print(f"翻譯錯誤: {str(e)}")
return text
# 測試自訂術語
create_custom_terminology()
text = "AWS provides Machine Learning services like Amazon Bedrock and SageMaker."
translated = translate_with_terminology(text, 'en', 'zh-TW', ['TechTerminology'])
print(f"原文: {text}")
print(f"譯文: {translated}")
關於多語言相關的,今天就說到這裡!